package com.example.culturemanage.culture

import android.view.View
import com.alibaba.android.arouter.facade.annotation.Autowired
import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.launcher.ARouter
import com.blankj.utilcode.util.ToastUtils
import com.bumptech.glide.Glide
import com.example.culturemanage.CultureManageViewModel
import com.example.culturemanage.databinding.ActivityDetailCultureBinding
import com.example.culturemanage.entity.DetailCultureData
import com.example.lib_base.mvvm.BaseActivity
import dagger.hilt.android.AndroidEntryPoint

/**
 * 文化详情页面 Activity
 *
 * 该页面用于展示文化信息的详细内容，并支持编辑和保存功能。
 * 使用 ARouter 进行路由管理，通过 homeid 参数获取具体数据。
 */
@AndroidEntryPoint
@Route(path = "/culturemanage/DetailCultureActivity")
class DetailCultureActivity : BaseActivity<ActivityDetailCultureBinding, CultureManageViewModel>() {

    /**
     * 通过路由自动注入的参数，表示当前文化的唯一标识 ID
     */
    @Autowired
    @JvmField
    var homeid = 0

    /**
     * 存储当前页面展示的文化详情数据
     */
    lateinit var bean: DetailCultureData

    /**
     * 初始化视图组件及事件监听
     *
     * 包括：
     * - 注入 ARouter 参数
     * - 请求文化详情数据
     * - 设置返回按钮点击事件
     * - 设置编辑按钮点击事件，进入编辑状态
     * - 设置保存按钮点击事件，收集输入数据并提交更新
     */
    override fun initView() {
        ARouter.getInstance().inject(this)
        vm.Culturedetail(homeid)
        binding.back.setOnClickListener { finish() }

        // 初始为只读模式
        setEditable(false)

        binding.edit.setOnClickListener {
            setEditable(true)
            binding.btnSave.visibility = View.VISIBLE
        }

        binding.btnSave.setOnClickListener {
            // 收集用户输入的数据
            val newTitle = binding.newtitle.text.toString()
            val newContent = binding.newcontent.text.toString()
            val newTime = binding.newtime.text.toString()
            val newType = binding.newtype.text.toString()

            // 设置为只读状态并隐藏保存按钮
            setEditable(false)
            bean.title = newTitle
            bean.content = newContent
            bean.publishDate = newTime
            bean.type = newType

            // 调用 ViewModel 提交修改
            vm.editCulture(homeid, bean)
            binding.btnSave.visibility = View.GONE
        }
    }

    /**
     * 设置表单字段是否可编辑
     *
     * @param editable true 表示启用编辑，false 表示禁用编辑
     */
    private fun setEditable(editable: Boolean) {
        binding.newtitle.isEnabled = editable
        binding.newcontent.isEnabled = editable
        binding.newtime.isEnabled = editable
        binding.newtype.isEnabled = editable
    }

    /**
     * 初始化数据观察者
     *
     * 监听 ViewModel 中的数据变化：
     * - 当文化详情加载成功时，填充界面数据
     * - 当文化信息更新成功时，提示用户保存成功
     */
    override fun initData() {
        vm.editCultureSuccess.observe(this) {
            ToastUtils.showShort("保存成功")
        }

        vm.CulturedetailSuccess.observe(this) {
            bean = it
            binding.newtitle.setText(bean.title)
            binding.newcontent.setText(bean.content)
            binding.newtime.setText(bean.publishDate)
            binding.newtype.setText(bean.type)

            // 如果存在图片，则加载第一张图片
            if (!bean.images.isNullOrEmpty()) {
                Glide.with(this)
                    .load(bean.images[0])
                    .into(binding.newimage)
            }

            // 设置为只读状态并隐藏保存按钮
            setEditable(false)
            binding.btnSave.visibility = View.GONE
        }
    }

    /**
     * 页面恢复时重新请求数据，确保显示最新内容
     */
    override fun onResume() {
        super.onResume()
        vm.Culturedetail(homeid)
    }
}
